package cn.iocoder.lw.module.core.service.workorder;

import cn.iocoder.lw.framework.common.pojo.PageResult;
import cn.iocoder.lw.module.core.controller.admin.workorder.vo.report.WorkOrderReportPageReqVO;
import cn.iocoder.lw.module.core.controller.admin.workorder.vo.report.WorkOrderReportGenerateReqVO;
import cn.iocoder.lw.module.core.controller.admin.workorder.vo.report.WorkOrderStatisticsRespVO;
import cn.iocoder.lw.module.core.controller.admin.workorder.vo.report.WorkOrderOverallStatisticsRespVO;

import jakarta.validation.Valid;
import java.util.List;

/**
 * 工单报表 Service 接口
 */
public interface WorkOrderReportService {

    /**
     * 生成工单统计报表
     *
     * @param generateReqVO 生成请求
     * @return 工单统计列表
     */
    List<WorkOrderStatisticsRespVO> generateWorkOrderReport(@Valid WorkOrderReportGenerateReqVO generateReqVO);

    /**
     * 获取工单报表统计分页
     *
     * @param pageReqVO 分页请求
     * @return 工单报表分页
     */
    PageResult<WorkOrderStatisticsRespVO> getWorkOrderReportPage(WorkOrderReportPageReqVO pageReqVO);

    /**
     * 获取用户工单详情
     *
     * @param userId 用户ID
     * @param reportType 报表类型 1-发起人统计，2-接单人统计
     * @param userType 用户类型 0-接单人，1-发起人
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 工单统计详情
     */
    WorkOrderStatisticsRespVO getUserWorkOrderReport(Long userId, Integer reportType, Integer userType,
                                                   java.time.LocalDateTime startTime, java.time.LocalDateTime endTime);

    /**
     * 获取工单总体统计
     *
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 总体统计
     */
    WorkOrderOverallStatisticsRespVO getOverallStatistics(java.time.LocalDateTime startTime, java.time.LocalDateTime endTime);

}